//
// Created by Yun on 2025/3/3.
//

#ifndef FRMAEWORK_DEMO_GPIO_SPI_INTERFACE_H
#define FRMAEWORK_DEMO_GPIO_SPI_INTERFACE_H


#include "interface_common_type.h"

/*---------------------- 类型定义 ----------------------*/
/**
  * @brief  SPI设备操作接口
  * @note   提供标准化的SPI总线操作接口，支持DMA配置扩展
  */
typedef struct Spi_Interface {
    /**
      * @brief  SPI硬件初始化
      * @param  pSpiHwCfg SPI硬件配置指针
      * @retval BSP_Status_TypeDef 操作状态码
      */
    uint8_t (*Init) (const void* pSpiHwCfg);

    /**
      * @brief  同步数据发送
      * @param  pSpiHwCfg   SPI硬件配置指针
      * @param  pu8TxData   发送数据缓冲区
      * @param  u16Len      数据长度（字节）
      * @param  u32TimeOut  超时时间（毫秒）
      * @retval BSP_Status_TypeDef
      */
    uint8_t (*Transmit) (const void* pSpiHwCfg, uint8_t* pu8TxData,
                         uint16_t u16Len, uint32_t u32TimeOut);

    /**
      * @brief  同步数据接收
      * @note   需要主设备先发送时钟信号
      * @param  pSpiHwCfg   SPI硬件配置指针
      * @param  pu8RxData   接收数据缓冲区
      * @param  u16Len      预期接收长度（字节）
      * @param  u32TimeOut  超时时间（毫秒）
      * @retval BSP_Status_TypeDef
      */
    uint8_t (*Receive) (const void* pSpiHwCfg, uint8_t* pu8RxData,
                        uint16_t u16Len, uint32_t u32TimeOut);

    /**
      * @brief  全双工数据交换
      * @param  pSpiHwCfg   SPI硬件配置指针
      * @param  pu8TxData   发送数据缓冲区
      * @param  pu8RxData   接收数据缓冲区
      * @param  u16Len      数据长度（字节）
      * @param  u32TimeOut  超时时间（毫秒）
      * @retval BSP_Status_TypeDef
      */
    uint8_t (*TransmitReceive) (const void* pSpiHwCfg, uint8_t* pu8TxData,
                                uint8_t* pu8RxData, uint16_t u16Len,
                                uint32_t u32TimeOut);

    /**
      * @brief  片选信号控制
      * @param  pSpiHwCfg   SPI硬件配置指针
      * @param  u8State     目标状态（GPIO_PIN_SET/GPIO_PIN_RESET）
      * @retval BSP_Status_TypeDef
      * @note   仅软件NSS模式有效
      */
    uint8_t (*ControlCS) (const void* pSpiHwCfg, uint8_t u8State);
}Spi_Interface_TypeDef;

#endif //FRMAEWORK_DEMO_GPIO_SPI_INTERFACE_H
